home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / dev / gui / gui4cli.lha / Gui4Cli / Tools / Calc.gc next >
Text File  |  1999-04-21  |  9KB  |  363 lines

  1. G4C
  2.  
  3. ; Calc.gc - by dck
  4. ; ----------------------------------------------------------------------------
  5. ; A calculator, which uses Gui4Cli's mathematical abilities to calculate
  6. ; complex math expression, including functions such as Log, Sin, Tan etc.
  7. ; This used to be based on ARexx - changed for Gui4Cli V3.5
  8. ; The code to convert between Dec<->Hex, Dec<->Bin and Hex<->Bin
  9. ; is by Björn X Öqvist, 1998-03-25
  10. ; ----------------------------------------------------------------------------
  11.  
  12. WINBIG 390 25 237 118 "FPCalc"    ; Our window.
  13. WinType 11110001                  ; It has all standard gadgets & bottom resize
  14. ; WINBACKGROUND PATTERN 0 2       ; Uncomment to add a flashy background..
  15. resinfo 8 660 270
  16.  
  17. BOX 0 0 0 0 out button ; A window sized box, taking us way beyond mere "cool"
  18.  
  19. ; ----------------------------------------------------------------------------
  20. ;       Startup/Ending events
  21. ; ----------------------------------------------------------------------------
  22.  
  23. xONLOAD                     ; Upon loading of the GUI
  24.     ifexists port ~AREXX        ; check for & start rexxmast
  25.        run rexxmast
  26.     endif
  27.     calcvar = ""               ; This is our main variable
  28.     GUIOPEN calc.gc
  29.     mem  = mem1                ; These are the Memory variables
  30.     mem1 = 0
  31.     mem2 = 0
  32.     mem3 = 0
  33.     mem4 = 0
  34.     mem5 = 0
  35.     membuff = ""
  36.     calcmode = SMALL      ; small/big window
  37.  
  38. xonclose
  39.     guiquit calc.gc
  40.     guiquit calc.hist
  41.  
  42. xOnQuit               ; On quitting we delete the env variables, 
  43.     delvar .result
  44.  
  45. ; ----------------------------------------------------------------------------
  46. ;       BUTTONS
  47. ;       All the buttons do the same thing. They AppVar their number or letter
  48. ;       to our main variable "calcvar" and redisplay it
  49. ; ----------------------------------------------------------------------------
  50.  
  51. ;============ The Buttons for the plain numbers
  52.  
  53. XBUTTON 6 21 25 15 1
  54.     gadkey 1                       ; Keyboard shortcut
  55.     AppVar calcvar 1               ; AppVar the number to "calcvar"
  56.     update calc.gc  1 $calcvar     ; and re-display it.
  57.  
  58. XBUTTON 33 21 25 15 2          ; same as above
  59.     gadkey  2
  60.     AppVar calcvar 2
  61.     update calc.gc  1 $calcvar
  62.  
  63. XBUTTON 60 21 25 15 3
  64.     gadkey  3
  65.     AppVar calcvar 3
  66.     update calc.gc  1 $calcvar
  67.  
  68. XBUTTON 6 36 25 15 4
  69.     gadkey  4
  70.     AppVar calcvar 4
  71.     update calc.gc  1 $calcvar
  72.  
  73. XBUTTON 33 36 25 15 5
  74.     gadkey  5
  75.     AppVar calcvar 5
  76.     update calc.gc  1 $calcvar
  77.  
  78. XBUTTON 60 36 25 15 6
  79.     gadkey  6
  80.     AppVar calcvar 6
  81.     update calc.gc  1 $calcvar
  82.  
  83. XBUTTON 6 51 25 15 7
  84.     gadkey  7
  85.     AppVar calcvar 7
  86.     update calc.gc  1 $calcvar
  87.  
  88. XBUTTON 33 51 25 15 8
  89.     gadkey  8
  90.     AppVar calcvar 8
  91.     update calc.gc  1 $calcvar
  92.  
  93. XBUTTON 60 51 25 15 9
  94.     gadkey  9
  95.     AppVar calcvar 9
  96.     update calc.gc  1 $calcvar
  97.  
  98. XBUTTON 6 66 25 15 0
  99.     gadkey  0
  100.     AppVar calcvar 0
  101.     update calc.gc  1 $calcvar
  102.  
  103. XBUTTON 33 66 25 15 .
  104.     gadkey  .
  105.     AppVar calcvar .
  106.     update calc.gc  1 $calcvar
  107.  
  108. XBUTTON 60 66 25 15 <        ; backspace
  109.     gadkey #8
  110.     cutvar calcvar CUT CHAR -1 ""   ; It will delete the last character of
  111.     update calc.gc  1 $calcvar     ; "calcvar" and re-display it
  112.  
  113. ;=============== The operators
  114.  
  115. XBUTTON 87 21 25 15 /
  116.     gadkey  /
  117.     AppVar calcvar /
  118.     update calc.gc  1 $calcvar
  119.  
  120. XBUTTON 87 36 25 15 *       ; hit twice for square
  121.     gadkey  *
  122.     AppVar calcvar *
  123.     update calc.gc  1 $calcvar
  124.  
  125. XBUTTON 87 51 25 15 -
  126.     gadkey  -
  127.     AppVar calcvar -
  128.     update calc.gc  1 $calcvar
  129.  
  130. XBUTTON 87 66 25 15 +
  131.     gadkey  +
  132.     AppVar calcvar +
  133.     update calc.gc  1 $calcvar
  134.  
  135. ;------------- right most bank
  136.  
  137. XBUTTON 114 21 25 15 (
  138.     gadkey  (
  139.     AppVar calcvar (
  140.     update calc.gc  1 $calcvar
  141.  
  142. XBUTTON 114 36 25 15 )
  143.     gadkey  )
  144.     AppVar calcvar )
  145.     update calc.gc  1 $calcvar
  146.  
  147. XBUTTON 195 66 37 15 CLR       ; Clear
  148.     gadkey #127
  149.     update calc.gc  1 0
  150.     setvar calcvar ""
  151.     if $calcmode = BIG                ; update ticker tape
  152.        lvuse calc.hist 1
  153.        LVAdd '** Clear **'
  154.     endif
  155.  
  156. XBUTTON 114 51 25 30 =
  157.     gadkey #13
  158.     gosub calc.gc calculate        ; GoSub the routine which does the calculation
  159.  
  160. ; =============== The function buttons
  161.  
  162. XBUTTON 141 66 25 15 "^"
  163.     gadkey ^
  164.     AppVar calcvar ^
  165.     update calc.gc  1 $calcvar
  166.  
  167. XBUTTON 168 66 25 15 "_Pi"
  168.     gadkey p
  169.     AppVar calcvar pi
  170.     update calc.gc  1 $calcvar
  171.  
  172. XBUTTON 141 21 44 15 "_Sin"
  173.     AppVar calcvar sin(
  174.     update calc.gc  1 $calcvar
  175.  
  176. XBUTTON 186 21 45 15 "_Cos"
  177.     AppVar calcvar cos(
  178.     update calc.gc  1 $calcvar
  179.  
  180. XBUTTON 186 36 45 15 "_Tan"
  181.     AppVar calcvar tan(
  182.     update calc.gc  1 $calcvar
  183.  
  184. XBUTTON 141 36 44 15 "_Log"
  185.     AppVar calcvar log(
  186.     update calc.gc  1 $calcvar
  187.  
  188. XBUTTON 141 51 44 15 "L_n"
  189.     AppVar calcvar ln(
  190.     update calc.gc  1 $calcvar
  191.  
  192. XBUTTON 186 51 45 15 "_Exp"
  193.     AppVar calcvar exp(
  194.     update calc.gc  1 $calcvar
  195.  
  196. ; ----------------------------------------------------------------------------
  197. ;       Display Panel
  198. ;       It's a xTEXTin gadget, so we can enter a calculation directly into it.
  199. ; ----------------------------------------------------------------------------
  200.  
  201. XTEXTIN 5 5 227 15 "" calcvar 0 512
  202.     GADID 1
  203.     gosub calc.gc calculate        ; GoSub the routine which does the calculation
  204.  
  205.  
  206. ; ----------------------------------------------------------------------------
  207. ;       Routine to calculate & display result
  208. ; ----------------------------------------------------------------------------
  209.  
  210. xROUTINE calculate
  211.     if $calcvar > ""                ; If there is an entry
  212.        if $calcmode = BIG
  213.           lvuse calc.hist 1         ; update history window if open
  214.           LVAdd '$calcvar'
  215.        endif
  216.        calcvar = $($calcvar)        ; do calculation
  217.        update calc.gc 1 $calcvar    ; display answer
  218.        if $calcmode = BIG           ; update ticker tape
  219.           LVAdd "-> $calcvar"
  220.        endif
  221.        if $calcvar = 0 
  222.           calcvar = ""              ; and if it's 0, we empty it (looks nicer)
  223.        endif
  224.     endif 
  225.  
  226. ; ----------------------------------------------------------------------------
  227. ;       MEMORIES
  228. ;       If you look at the following code carefully, you will see that we
  229. ;       need a variable within a variable. We use "membuff" to construct it.
  230. ; ----------------------------------------------------------------------------
  231.  
  232. ;============ Memories display panel
  233.  
  234. XTEXTIN 6 84 123 14 "" $mem 0 30
  235.     GadID 5
  236.  
  237. ;============ Memories cycler
  238.  
  239. XCYCLER 6 99 62 15 "" mem
  240.     Cstr "M1" mem1
  241.     Cstr "M2" mem2
  242.     Cstr "M3" mem3
  243.     Cstr "M4" mem4
  244.     Cstr "M5" mem5
  245.     membuff = "\$$mem"         ; This means set membuff to $ + whatever is in "mem"
  246.     update calc.gc 5 $membuff  ; so that it points to the correct variable
  247.  
  248. ;============ Memory IN/OUT
  249.  
  250. XBUTTON 69 99 15 15 I          ; These buttons do the usual MEM in/out/+/-
  251.     $mem = $calcvar                 ; stuff that calculators do.
  252.     membuff = "\$$mem"
  253.     update calc.gc 5 $membuff
  254.  
  255. XBUTTON 84 99 15 15 O
  256.     membuff = "\$$mem"
  257.     AppVar calcvar $membuff
  258.     update calc.gc 1 $calcvar
  259.  
  260. XBUTTON 99 99 15 15 +
  261.     membuff = "\$$mem"
  262.     $mem = $($calcvar + $membuff)
  263.     membuff = "\$$mem"
  264.     update calc.gc 5 $membuff
  265.  
  266. XBUTTON 114 99 15 15 -
  267.     membuff = "\$$mem"
  268.     $mem = $($membuff - $calcvar)
  269.     membuff = "\$$mem"
  270.     update calc.gc 5 $membuff
  271.  
  272. ; ----------------------------------------------------------------------------
  273. ;       Hex/Binary conversion
  274. ; ----------------------------------------------------------------------------
  275.  
  276. XTEXTIN 132 84 100 14 "" BinHex 0 30
  277. GadID 4
  278.  
  279. XCYCLER 132 99 68 15 "" BinHexMode
  280.     Cstr "Hex" hex
  281.     Cstr "Bin" bin
  282.     IF $BinHexMode = "bin"
  283.         CLI "rx 'say >env:.result C2B(X2C($BinHex\))'"
  284.     ELSE
  285.        CLI "rx 'say >env:.result C2X(B2C($BinHex\))'"
  286.     ENDIF
  287.     SetVar BinHex $.result
  288.     update calc.gc 4 $BinHex
  289.  
  290.  
  291. XBUTTON 201 99 15 15 I        ; input from main display
  292.     local res
  293.     ; calculate main display
  294.     res = $($calcvar)
  295.     ; convert into whole number (floats not allowed)
  296.     searchvar res '.' CS first
  297.     if $$search.pos != ""
  298.        pos = $$search.pos
  299.        res = $res[0][$pos]
  300.     endif
  301.     IF $BinHexMode = "bin"
  302.         CLI "rx 'say >env:.result C2B(D2C($res\))'"
  303.     ELSE
  304.        CLI "rx 'say >env:.result C2X(D2C($res\))'"
  305.     ENDIF
  306.     BinHex = $.result
  307.     update calc.gc 4 $BinHex
  308.  
  309.  
  310. XBUTTON 216 99 15 15 O        ; output to main display
  311.     IF $BinHexMode = "bin"
  312.         CLI "rx 'say >env:.result C2D(B2C($BinHex\))'"
  313.     ELSE
  314.        CLI "rx 'say >env:.result C2D(X2C($BinHex\))'"
  315.     ENDIF
  316.     AppVar calcvar $.result    ; appvar instead of setvar ?
  317.     update calc.gc 1 $calcvar
  318.  
  319.  
  320. ; --------------------------------